package org.zxp.designpattern.template;

import com.sun.org.apache.bcel.internal.generic.RETURN;

import java.util.UUID;

/**
 * @program: effectiveJava
 * @description: 车险服务抽象类
 * @author: X-Pacific zhang
 * @create: 2019-08-23 14:01
 **/
public abstract class AbstractPolicyServer {
    PolicyBean policyBean;
    /**
     * 保存模版方法，不能重写此方法
     * @param json
     * @return
     */
    public final boolean save(String json){
        //组织对象
        policyBean = generateObject(json);
        //生成单号
        System.out.println("单号："+generatePolicyNo());
        //与平台交互、与三方系统交互、保存
        if(sendToPlatform() && sendToMisc() && save()){
            return true;
        }else{
            return false;
        }
    }


    /**
     * 通过入参报文组织对象，此方法必须有子类实现
     * @param json
     * @return
     */
    public abstract PolicyBean generateObject(String json);

    public String generatePolicyNo(){
        String policyNo = UUID.randomUUID()+"";
        policyBean.setPolicyNo(policyNo);
        return policyNo;
    }

    /**
     * 与全国平台交互，如果特殊需要重写此方法
     * @return
     */
    public boolean sendToPlatform(){
        System.out.println("与全国平台交互");
        return true;
    }

    /**
     * 与全国平台交互，如果特殊需要重写此方法
     * @return
     */
    public boolean sendToMisc(){
        System.out.println("与三方系统精友交互");
        System.out.println("与三方系统规则引擎交互");
        return true;
    }

    /**
     * 保存方法
     * @return
     */
    private final boolean save(){
        System.out.println("保存保单");
        return true;
    }

}
